package com.heiye.quiz.biz.service;

import com.heiye.framework.common.response.Response;
import com.heiye.quiz.api.dto.req.CheckNoteIsExistReqDTO;
import com.heiye.quiz.api.dto.req.FindQuizCreatorReqDTO;
import com.heiye.quiz.api.dto.resp.CheckQuizIsExistRespDTO;
import com.heiye.quiz.api.dto.resp.FindQuizCreatorRespDTO;
import com.heiye.quiz.biz.model.vo.req.*;
import com.heiye.quiz.biz.model.vo.rsep.FindQuizDetailRspVO;
import com.heiye.quiz.biz.model.vo.rsep.FindQuizIsLikeRspVO;
import com.heiye.quiz.biz.model.vo.rsep.FindQuizzesRspVO;

/**
 * @author: heiye
 * @date: 2025/03/17 下午10:19
 * @version: v1.0.0
 * @description: 问题业务
 */
public interface QuizService {
    /**
     * 问题发布
     *
     * @param publishQuizReqVO
     * @return
     */
    Response<?> publishQuiz(PublishQuizReqVO publishQuizReqVO);

    /**
     * 问题详情
     *
     * @return
     */
    Response<FindQuizDetailRspVO> findQuizDetail(FindQuizDetailReqVO findQuizDetailReqVO);

    /**
     * 问题更新
     *
     * @param updateQuizReqVO
     * @return
     */
    Response<?> updateQuiz(UpdateQuizReqVO updateQuizReqVO);

    /**
     * 删除本地问题缓存
     *
     * @param quizId
     */
    void deleteQuizLocalCache(Long quizId);

    /**
     * 问题删除
     *
     * @param deleteQuizReqVO
     * @return
     */
    Response<?> deleteQuiz(DeleteQuizReqVO deleteQuizReqVO);

    /**
     * 批量查询问题
     *
     * @param findQuizzesReqVO
     * @return
     */
    Response<FindQuizzesRspVO> findQuizzes(FindQuizzesReqVO findQuizzesReqVO);

    /**
     * 查询是否笔记存在
     *
     * @param checkNoteIsExistReqDTO
     * @return
     */
    Response<CheckQuizIsExistRespDTO> checkNoteIsExist(CheckNoteIsExistReqDTO checkNoteIsExistReqDTO);

    /**
     * 点赞问题
     *
     * @param likeQuizReqVO
     * @return
     */
    Response<?> likeQuiz(LikeQuizReqVO likeQuizReqVO);

    /**
     * 取消点赞问题
     *
     * @param unlikeQuizReqVO
     * @return
     */
    Response<?> unlikeQuiz(UnlikeQuizReqVO unlikeQuizReqVO);

    /**
     * 获取是否点赞数据
     *
     * @param findQuizIsLikeReqVO
     * @return
     */
    Response<FindQuizIsLikeRspVO> isLikedData(FindQuizIsLikeReqVO findQuizIsLikeReqVO);

    /**
     * 查询问题作者信息
     *
     * @param findQuizCreatorReqDTO
     * @return
     */
    Response<FindQuizCreatorRespDTO> findQuizCreator(FindQuizCreatorReqDTO findQuizCreatorReqDTO);
}
